In an attempt to speed up processes, software developers have often tried to distribute the processes on multiple physical machines. For simple problems, there are some well known solutions for distributing computation among multiple machines for some programming problems.
For example, in searching a key space for a cryptographic key, each machine that is involved in the searching may be assigned one or more ranges within the key space. After a machine has been assigned a range, the machine may search the range for the key without additional interaction. After the machine has searched the space or found the key, the machine may communicate its results to a machine that is reporting on the results. Even with this relatively simple programming problem, however, effort is needed to determine how the problem will be divided between the available machines, coding the software with a distributed model in mind, and determining how to minimize communications between machines.
Because of communication latency and other overhead associated with distributed computing, processes that are distributed across multiple machines may actually take longer than if the processes were not distributed. Because of the complexities of distributing processes across multiple machines, it is often avoided or used only as a last resort.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.